// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLExpr*;
// import com.alibaba.druid.sql.ast.SQLName*;
// import com.alibaba.druid.sql.ast.SQLObject*;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.std::list;
#pragma once
#include <list>
#include "../SQLStatementImpl.h"

class SQLExpr;
class SQLObject;
class SQLName;
class SQLASTVisitor;
class DbType;

class SQLRollbackStatement : virtual public SQLStatementImpl
{
public:
    SQLName_ptr to;

    // for mysql
    BOOL_ptr chain;
    BOOL_ptr release;
    SQLExpr_ptr force;

    SQLRollbackStatement();

    SQLRollbackStatement(DbType_ptr  dbType);
  SHAREDOBJECT(SQLRollbackStatement);

    void accept0(SQLASTVisitor_ptr visitor);

    SQLObject_list_ptr  getChildren();

    SQLName_ptr getTo();

    void setTo(SQLName_ptr to);

    BOOL_ptr getChain();

    void setChain(BOOL_ptr chain);

    BOOL_ptr getRelease();

    void setRelease(BOOL_ptr release);

    SQLExpr_ptr getForce();

    void setForce(SQLExpr_ptr force);
  virtual SQLObject_ptr clone()
  {
    SQLObject_ptr clone_tmp = std::shared_ptr<SQLRollbackStatement>(new SQLRollbackStatement());
    std::shared_ptr<SQLRollbackStatement> x = std::dynamic_pointer_cast<SQLRollbackStatement>(clone_tmp);
    return x;
  }
};
